Conventionally, storage devices each including a disk array are known. Generally, the disk array is constructed by RAID (redundant arrays of independent disks or redundant arrays of inexpensive disks) using a plurality of hard disk drives (HDD). Such a disk array (hereinafter, referred to as a first array) has redundancy by applying error correcting code data such as parity data.
In addition, in recent years, storage devices each including an array (hereinafter, referred to as a second array) that comprises a plurality of solid state drives (SSD) appear. The SSD comprises non-volatile rewritable memories such as NAND-type flash memories. Accordingly, the access performance of the SSD is higher than that of the HDD accompanied by a mechanical operation in reading/writing data. However, the life of an SSD, for example, depends on the number of data write operations to the SSD.
In the first array, for load distribution, generally, error correcting code blocks (for example, parity blocks) are arranged by being uniformly distributed on the plurality of HDDs in units of areas called stripe groups. Thus, also in the second array, the error correcting code blocks are assumed to be arranged by being uniformly distributed on the plurality of SSDs in units of stripe groups. In such a case, the numbers of data write operations to the plurality of SSDs are uniformized, and there is a high possibility that the plurality of SSDs fail at the same time. Accordingly, in the second array, it is required that the numbers of data write operations to the plurality of SSDs are non-uniform.
Thus, according to a conventional technology, a controller (storage controller) in the storage device monitors the numbers of data write operations to the plurality of SSDs. As a result of the monitoring, in a case where the numbers of writing needs to be non-uniform, the controller dynamically changes the locations of the error correcting code blocks and the locations of the data blocks in units of stripe groups. For the change of the locations, the controller manages the locations of the error correcting code blocks and the locations of the data blocks for each stripe group, using a map table.
However, according to the conventional technology, the memory capacity that is necessary for storing the map table tends to increase in accordance with a recent increase in the capacity of the array. In addition, in a case where the changes in the locations of the error correcting code blocks and the locations of the data blocks are excessively performed, the number of data write operations to each SSD increases in accordance with the changes.